using System;
using EnvDTE;

namespace NUnitGenAddIn.VS2008.Test
{
    /// <summary>
    /// Mock Code <c>Namespace</c> 2008
    /// </summary>
    internal class MockCodeNamespace2008 : MockCodeElement2008, CodeNamespace
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace2008"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        public MockCodeNamespace2008(string name) : base(name)
        {}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeNamespace2008"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="children">The children.</param>
        public MockCodeNamespace2008(string name, CodeElements children) : base(name, children)
        {}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
        public override vsCMElement Kind
        {
            get { return vsCMElement.vsCMElementNamespace; }
        }

        #region CodeNamespace Members

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeClass AddClass(string name, object position, object bases, object implementedInterfaces, 
                                  vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="position">The position.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeDelegate AddDelegate(string name, object type, object position, vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the enumerator.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeEnum AddEnum(string name, object position, object bases, vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the interface.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeInterface AddInterface(string name, object position, object bases, vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the <c>Namespace</c>.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <returns></returns>
        public CodeNamespace AddNamespace(string name, object position)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Adds the structure.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
        public CodeStruct AddStruct(string name, object position, object bases, object implementedInterfaces,
                                    vsCMAccess access)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
        public string Comment
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
        public string DocComment
        {
            get { throw new Exception("The method or operation is not implemented."); }
            set { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
        public CodeElements Members
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Gets the parent.
        /// </summary>
        /// <value>The parent.</value>
        public new object Parent
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        /// <summary>
        /// Removes the specified element.
        /// </summary>
        /// <param name="element">The element.</param>
        public void Remove(object element)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
}